home *** CD-ROM | disk | FTP | other *** search
/ BUG 1 / BUGCD1996_0708.ISO / pc / util / minilin / minilin.exe / USR / LIB / PPP / README_L.{_3 < prev    next >
Text File  |  1994-06-30  |  14KB  |  611 lines

  1. To make a version of pppstats for Linux, you need to perform the
  2. following steps.
  3.  
  4. 1. Apply the patches in the file Linux.diffs to the files in this
  5.    directory.
  6.  
  7.    patch -p0 <README.Linux
  8.  
  9. 2. Ensure that the linux distribution is stored in the directory
  10.    /usr/src/linux. If you do not have it located there than change
  11.    the Makefile.linux accordingly to the proper directory.
  12.  
  13. 3. Issue the command:
  14.  
  15.    make -f Makefile.linux
  16.  
  17.    to construct the program.
  18.  
  19. This program is not "distributed" in the true sense. It should work with
  20. kernels greater than 1.1.17 (that is 1.1.18 or later) as it contains the
  21. patches which the program needs to access the statistics.
  22.  
  23. I do not know if the statistics are proper. I chose to keep the statistics
  24. in the format needed by LQP rather than the names used by pppstats. So,
  25. some of the statistics are separated when they were merged for the other
  26. platforms, and visa-versa.
  27.  
  28. A great program, pppstats is not. However, it is interesting and worth
  29. running once.
  30.  
  31.                             -----------------
  32.  
  33. *** pppstats.c.orig    Sat Jun 11 07:18:15 1994
  34. --- pppstats.c    Sat Jun 11 07:17:44 1994
  35. ***************
  36. *** 33,53 ****
  37.   #include <errno.h>
  38.   #include <nlist.h>
  39.   #include <stdio.h>
  40.   #include <signal.h>
  41.   #include <sys/param.h>
  42. - #include <sys/mbuf.h>
  43.   #include <sys/types.h>
  44.   #include <sys/socket.h>
  45.   #include <sys/file.h>
  46.   #include <net/if.h>
  47.   #include <netinet/in.h>
  48. - #include <netinet/in_systm.h>
  49.   #include <netinet/ip.h>
  50.   #include <netinet/ip_var.h>
  51. - #define    VJC    1
  52.   #include <net/slcompress.h>
  53.   
  54.   #ifndef STREAMS
  55.   #include <net/if_ppp.h>
  56.   #endif
  57. --- 33,71 ----
  58.   #include <errno.h>
  59.   #include <nlist.h>
  60.   #include <stdio.h>
  61.   #include <signal.h>
  62.   #include <sys/param.h>
  63.   #include <sys/types.h>
  64.   #include <sys/socket.h>
  65.   #include <sys/file.h>
  66.   #include <net/if.h>
  67. + #define    VJC    1
  68. + #ifdef _linux_
  69. + #include <sys/types.h>
  70. + #include <sys/fcntl.h>
  71. + #include <malloc.h>
  72. + #include <errno.h>
  73. + #include <string.h>
  74. + #include <signal.h>
  75. + #include <linux/ppp.h>
  76. + #include <netinet/ip.h>
  77. + #include <netinet/tcp.h>
  78. + #include <slhc.h> /* linux base directory passed on -I parameter */
  79. + struct ifreq    ifreq;
  80. + int        fd;
  81. + #else    /* _linux_ */
  82. + #include <sys/mbuf.h>
  83.   #include <netinet/in.h>
  84.   #include <netinet/ip.h>
  85. + #include <netinet/in_systm.h>
  86.   #include <netinet/ip_var.h>
  87.   #include <net/slcompress.h>
  88.   
  89.   #ifndef STREAMS
  90.   #include <net/if_ppp.h>
  91.   #endif
  92. ***************
  93. *** 69,79 ****
  94.   #include <machine/cpu.h>
  95.   #endif
  96.   
  97.   struct    pte *Sysmap;
  98.   int    kmem;
  99. - char    *kmemf = "/dev/kmem";
  100.   extern    off_t lseek();
  101.   
  102.   #else    /* KVMLIB */
  103.   
  104.   char    *kmemf;
  105. --- 87,96 ----
  106. ***************
  107. *** 101,124 ****
  108.       { "_ppp_softc" },
  109.       "",
  110.   };
  111.   #endif
  112.   
  113. ! #ifndef BSD4_4
  114. ! char    *system = "/vmunix";
  115. ! #else
  116.   #include <paths.h>
  117. ! char    *system = _PATH_UNIX;
  118.   #endif
  119.   
  120.   int    kflag;
  121.   int    vflag;
  122.   unsigned interval = 5;
  123.   int    unit;
  124.   
  125. - extern    char *malloc();
  126.   main(argc, argv)
  127.       int argc;
  128.       char *argv[];
  129.   {
  130.       --argc; ++argv;
  131. --- 118,146 ----
  132.       { "_ppp_softc" },
  133.       "",
  134.   };
  135.   #endif
  136.   
  137. ! extern    char *malloc();
  138. ! #endif    /* _linux_ */
  139. ! #ifdef BSD4_4
  140.   #include <paths.h>
  141. ! #endif
  142. ! #ifndef _PATH_UNIX
  143. ! #define _PATH_UNIX "/vmunix"
  144.   #endif
  145.   
  146. + char    *kmemf  = "/dev/kmem";
  147. + char    *system = _PATH_UNIX;
  148.   int    kflag;
  149.   int    vflag;
  150.   unsigned interval = 5;
  151.   int    unit;
  152.   
  153.   main(argc, argv)
  154.       int argc;
  155.       char *argv[];
  156.   {
  157.       --argc; ++argv;
  158. ***************
  159. *** 153,162 ****
  160. --- 175,195 ----
  161.               kmemf = *argv++;
  162.               --argc;
  163.               kflag++;
  164.           }
  165.       }
  166. + #ifdef _linux_
  167. +     memset (&ifreq, '\0', sizeof (ifreq));
  168. +     sprintf (ifreq.ifr_ifrn.ifrn_name, "ppp%d", unit);
  169. +     /* Get an internet socket for doing socket ioctls. */
  170. +     if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
  171. +         perror("socket(AF_INET,SOCK_DGRAM,0)");
  172. +         exit(1);
  173. +     }
  174. + #else  /* _linux_ */
  175.   #ifndef KVMLIB
  176.       if (nlist(system, nl) < 0 || nl[0].n_type == 0) {
  177.           fprintf(stderr, "%s: no namelist\n", system);
  178.           exit(1);
  179.       }
  180. ***************
  181. *** 179,189 ****
  182.           (void)lseek(kmem, off, L_SET);
  183.           (void)read(kmem, (char *)Sysmap,
  184.               (int)(nl[N_SYSSIZE].n_value * sizeof(struct pte)));
  185.       }
  186.   #endif
  187. ! #else
  188.   #ifdef sun
  189.       /* SunOS */
  190.       if ((kd = kvm_open(system, kmemf, (char *)0, O_RDONLY, NULL)) == NULL) {
  191.           perror("kvm_open");
  192.           exit(1);
  193. --- 212,222 ----
  194.           (void)lseek(kmem, off, L_SET);
  195.           (void)read(kmem, (char *)Sysmap,
  196.               (int)(nl[N_SYSSIZE].n_value * sizeof(struct pte)));
  197.       }
  198.   #endif
  199. ! #else  /* KVMLIB */
  200.   #ifdef sun
  201.       /* SunOS */
  202.       if ((kd = kvm_open(system, kmemf, (char *)0, O_RDONLY, NULL)) == NULL) {
  203.           perror("kvm_open");
  204.           exit(1);
  205. ***************
  206. *** 192,212 ****
  207.       /* BSD4.3+ */
  208.       if (kvm_openfiles(system, kmemf, (char *)0) == -1) {
  209.           fprintf(stderr, "kvm_openfiles: %s", kvm_geterr());
  210.           exit(1);
  211.       }
  212. ! #endif
  213.   
  214.       if (kvm_nlist(KDARG nl)) {
  215.           fprintf(stderr, "pppstats: can't find symbols in nlist\n");
  216.           exit(1);
  217.       }
  218. ! #endif
  219.       intpr();
  220.       exit(0);
  221.   }
  222.   
  223.   #ifndef KVMLIB
  224.   /*
  225.    * Seek into the kernel for a value.
  226.    */
  227.   off_t
  228. --- 225,247 ----
  229.       /* BSD4.3+ */
  230.       if (kvm_openfiles(system, kmemf, (char *)0) == -1) {
  231.           fprintf(stderr, "kvm_openfiles: %s", kvm_geterr());
  232.           exit(1);
  233.       }
  234. ! #endif    /* sun */
  235.   
  236.       if (kvm_nlist(KDARG nl)) {
  237.           fprintf(stderr, "pppstats: can't find symbols in nlist\n");
  238.           exit(1);
  239.       }
  240. ! #endif    /* KVMLIB  */
  241. ! #endif    /* _linux_ */
  242.       intpr();
  243.       exit(0);
  244.   }
  245.   
  246. + #ifndef _linux_
  247.   #ifndef KVMLIB
  248.   /*
  249.    * Seek into the kernel for a value.
  250.    */
  251.   off_t
  252. ***************
  253. *** 218,254 ****
  254.   #ifdef ultrix
  255.           base = K0_TO_PHYS(base);
  256.   #else
  257.           /* get kernel pte */
  258.           base &= ~KERNBASE;
  259. !                 base = ctob(Sysmap[btop(base)].pg_pfnum) + (base & PGOFSET);
  260.   #endif
  261.       }
  262.       return (lseek(fd, base, off));
  263.   }
  264.   #endif
  265.   
  266.   usage()
  267.   {
  268. !     fprintf(stderr,"usage: pppstats [-i interval] [-v] [unit] [system] [core]\n");
  269.       exit(1);
  270.   }
  271.   
  272.   u_char    signalled;            /* set if alarm goes off "early" */
  273.   
  274.   #define V(offset) ((line % 20)? sc->offset - osc->offset : sc->offset)
  275.   
  276.   #ifdef STREAMS
  277.   #define STRUCT    struct ppp_if_info
  278.   #define    COMP    pii_sc_comp
  279.   #define    STATS    pii_ifnet
  280.   #else
  281.   #define STRUCT    struct ppp_softc
  282.   #define    COMP    sc_comp
  283.   #define    STATS    sc_if
  284.   #endif
  285.   
  286.   /*
  287.    * Print a running summary of interface statistics.
  288.    * Repeat display every interval seconds, showing statistics
  289.    * collected over that interval.  Assumes that interval is non-zero.
  290.    * First line printed at top of screen is always cumulative.
  291. --- 253,369 ----
  292.   #ifdef ultrix
  293.           base = K0_TO_PHYS(base);
  294.   #else
  295.           /* get kernel pte */
  296.           base &= ~KERNBASE;
  297. !         base = ctob(Sysmap[btop(base)].pg_pfnum) + (base & PGOFSET);
  298.   #endif
  299.       }
  300.       return (lseek(fd, base, off));
  301.   }
  302.   #endif
  303. + #endif    /* _linux_ */
  304.   
  305.   usage()
  306.   {
  307. !     fprintf(stderr,"usage: pppstats [-i interval] [-v] [unit]"
  308. ! #ifndef _linux_
  309. !         " [system] [core]"
  310. ! #endif
  311. !         "\n");
  312.       exit(1);
  313.   }
  314.   
  315.   u_char    signalled;            /* set if alarm goes off "early" */
  316.   
  317.   #define V(offset) ((line % 20)? sc->offset - osc->offset : sc->offset)
  318.   
  319. + #ifdef _linux_
  320. + typedef struct __struct
  321. + {
  322. +   struct ppp_stats  stats;
  323. +   struct slcompress slcomp;
  324. + } STRUCT;
  325. + #define STATS        stats
  326. + #define COMP        slcomp
  327. + #define RCOMP            V(STATS.rcomp)
  328. + #define RUNCOMP            V(STATS.runcomp)
  329. + #define ROTHERS            V(STATS.rothers)
  330. + #define RPACKETS        (RCOMP+RUNCOMP+ROTHERS)
  331. + #define RERRORS            V(STATS.rerrors)
  332. + #define ROVERRUN        V(STATS.roverrun)
  333. + #define RTOSSED            V(STATS.tossed)
  334. + #define RERROR            (RERRORS+ROVERRUN+RTOSSED)
  335. + #define SCOMP            V(STATS.scomp)
  336. + #define SUNCOMP            V(STATS.suncomp)
  337. + #define SOTHERS            V(STATS.sothers)
  338. + #define SPACKETS        (SCOMP+SUNCOMP+SOTHERS)
  339. + #define SERROR            V(STATS.serrors)
  340. + #define stats_ibytes        V(STATS.rbytes)
  341. + #define stats_ipackets        RPACKETS
  342. + #define stats_compressedin    RCOMP
  343. + #define stats_uncompressedin    RUNCOMP
  344. + #define stats_errorin        RERROR
  345. + #define stats_tossed        RTOSSED
  346. + #define stats_ip        (RPACKETS-RERROR-ROTHERS)
  347. + #define stats_obytes        V(STATS.sbytes)
  348. + #define stats_opackets        SPACKETS
  349. + #define stats_compressedout    SCOMP
  350. + #define stats_uncompressedout    SUNCOMP
  351. + #define stats_errorout        SERROR
  352. + #define stats_searches        V(COMP.sls_o_searches)
  353. + #define stats_misses        V(COMP.sls_o_misses)
  354. + #else  /* _linux_ */
  355. + #define stats_ipackets        V(STATS.if_ipackets)
  356. + #define stats_compressedin    V(COMP.sls_compressedin)
  357. + #define stats_uncompressedin    V(COMP.sls_uncompressedin)
  358. + #define stats_errorin        V(COMP.sls_errorin)
  359. + #define stats_tossed        V(COMP.sls_tossed)
  360. + #define stats_ip        V(STATS.if_ipackets) -        \
  361. +                 V(COMP.sls_compressedin) -    \
  362. +                 V(COMP.sls_uncompressedin) -    \
  363. +                 V(COMP.sls_errorin)
  364. + #define stats_opackets        V(STATS.if_opackets)
  365. + #define stats_compressedout    V(COMP.sls_compressed)
  366. + #define stats_uncompressedout    V(COMP.sls_packets) - V(COMP.sls_compressed)
  367. + #define stats_errorout        V(STATS.if_opackets) - V(COMP.sls_packets)
  368. + #define stats_searches        V(COMP.sls_searches)
  369. + #define stats_misses        V(COMP.sls_misses)
  370.   #ifdef STREAMS
  371.   #define STRUCT    struct ppp_if_info
  372.   #define    COMP    pii_sc_comp
  373.   #define    STATS    pii_ifnet
  374.   #else
  375.   #define STRUCT    struct ppp_softc
  376.   #define    COMP    sc_comp
  377.   #define    STATS    sc_if
  378.   #endif
  379.   
  380. + #ifdef BSD4_4
  381. + #define stats_ibytes    V(STATS.if_ibytes)
  382. + #define stats_obytes    V(STATS.if_obytes)
  383. + #ifndef STREAMS
  384. + #define stats_ibytes    V(sc_bytesrcvd)
  385. + #define stats_obytes    V(sc_bytessent)
  386. + #else
  387. + #ifdef PPP_STATS
  388. + #define stats_ibytes    V(pii_stats.ppp_ibytes)
  389. + #define stats_obytes    V(pii_stats.ppp_obytes)
  390. + #else
  391. + #define stats_ibytes    0
  392. + #define stats_obytes    0
  393. + #endif /* BSD4_4 */
  394. + #endif /* STREAMS */
  395. + #endif /* PPP_STATS */
  396. + #endif /* _linux_ */
  397.   /*
  398.    * Print a running summary of interface statistics.
  399.    * Repeat display every interval seconds, showing statistics
  400.    * collected over that interval.  Assumes that interval is non-zero.
  401.    * First line printed at top of screen is always cumulative.
  402. ***************
  403. *** 263,279 ****
  404.       void catchalarm();
  405.   #endif
  406.   
  407.       STRUCT *sc, *osc;
  408.   
  409. !     nl[N_SOFTC].n_value += unit * sizeof(STRUCT);
  410. !     sc = (STRUCT *)malloc(sizeof(STRUCT));
  411. !     osc = (STRUCT *)malloc(sizeof(STRUCT));
  412.   
  413. !     bzero((char *)osc, sizeof(STRUCT));
  414.   
  415.       while (1) {
  416.   #ifndef KVMLIB
  417.           if (klseek(kmem, (off_t)nl[N_SOFTC].n_value, 0) == -1) {
  418.           perror("kmem seek");
  419.           exit(1);
  420.           }
  421. --- 378,403 ----
  422.       void catchalarm();
  423.   #endif
  424.   
  425.       STRUCT *sc, *osc;
  426.   
  427. !     sc  = (STRUCT *) calloc (1, sizeof(STRUCT));
  428. !     osc = (STRUCT *) calloc (1, sizeof(STRUCT));
  429.   
  430. ! #ifdef _linux_
  431. !     ifreq.ifr_ifru.ifru_data = (caddr_t) sc;
  432. ! #else
  433. !     nl[N_SOFTC].n_value += unit * sizeof(STRUCT);
  434. ! #endif
  435.   
  436.       while (1) {
  437. + #ifdef _linux_
  438. +         if (ioctl (fd, SIOCDEVPRIVATE, (caddr_t) &ifreq) < 0) {
  439. +         perror ("ioctl(SIOCDEVPRIVATE)");
  440. +         exit(1);
  441. +         }
  442. + #else
  443.   #ifndef KVMLIB
  444.           if (klseek(kmem, (off_t)nl[N_SOFTC].n_value, 0) == -1) {
  445.           perror("kmem seek");
  446.           exit(1);
  447.           }
  448. ***************
  449. *** 286,295 ****
  450. --- 410,420 ----
  451.                sizeof(STRUCT)) != sizeof(STRUCT)) {
  452.           perror("kvm_read");
  453.           exit(1);
  454.           }
  455.   #endif
  456. + #endif
  457.   
  458.           (void)signal(SIGALRM, catchalarm);
  459.           signalled = 0;
  460.           (void)alarm(interval);
  461.   
  462. ***************
  463. *** 304,357 ****
  464.               printf(" %6.6s %6.6s", "search", "miss");
  465.           putchar('\n');
  466.           }
  467.   
  468.           printf("%6d %6d %6d %6d %6d",
  469. ! #ifdef BSD4_4
  470. !            V(STATS.if_ibytes),
  471. ! #else
  472. ! #ifndef STREAMS
  473. !            V(sc_bytesrcvd),
  474. ! #else
  475. ! #ifdef PPP_STATS
  476. !            V(pii_stats.ppp_ibytes),
  477. ! #else
  478. !            0,
  479. ! #endif
  480. ! #endif
  481. ! #endif
  482. !            V(STATS.if_ipackets),
  483. !            V(COMP.sls_compressedin),
  484. !            V(COMP.sls_uncompressedin),
  485. !            V(COMP.sls_errorin));
  486.           if (vflag)
  487.           printf(" %6d %6d",
  488. !                V(COMP.sls_tossed),
  489. !                V(STATS.if_ipackets) - V(COMP.sls_compressedin) -
  490. !                 V(COMP.sls_uncompressedin) - V(COMP.sls_errorin));
  491.           printf(" | %6d %6d %6d %6d %6d",
  492. ! #ifdef BSD4_4
  493. !            V(STATS.if_obytes),
  494. ! #else
  495. ! #ifndef STREAMS
  496. !            V(sc_bytessent),
  497. ! #else
  498. ! #ifdef PPP_STATS
  499. !            V(pii_stats.ppp_obytes),
  500. ! #else
  501. !            0,
  502. ! #endif
  503. ! #endif
  504. ! #endif
  505. !            V(STATS.if_opackets),
  506. !            V(COMP.sls_compressed),
  507. !            V(COMP.sls_packets) - V(COMP.sls_compressed),
  508. !            V(STATS.if_opackets) - V(COMP.sls_packets));
  509.           if (vflag)
  510.           printf(" %6d %6d",
  511. !                V(COMP.sls_searches),
  512. !                V(COMP.sls_misses));
  513.   
  514.           putchar('\n');
  515.           fflush(stdout);
  516.           line++;
  517.   
  518. --- 429,460 ----
  519.               printf(" %6.6s %6.6s", "search", "miss");
  520.           putchar('\n');
  521.           }
  522.   
  523.           printf("%6d %6d %6d %6d %6d",
  524. !            stats_ibytes,
  525. !            stats_ipackets,
  526. !            stats_compressedin,
  527. !            stats_uncompressedin,
  528. !            stats_errorin);
  529.           if (vflag)
  530.           printf(" %6d %6d",
  531. !                stats_tossed,
  532. !                stats_ip);
  533.           printf(" | %6d %6d %6d %6d %6d",
  534. !            stats_obytes,
  535. !            stats_opackets,
  536. !            stats_compressedout,
  537. !            stats_uncompressedout,
  538. !            stats_errorout);
  539.           if (vflag)
  540.           printf(" %6d %6d",
  541. !                stats_searches,
  542. !                stats_misses);
  543.   
  544.           putchar('\n');
  545.           fflush(stdout);
  546.           line++;
  547.   
  548.  
  549. *** /dev/null    Tue Nov 30 11:30:13 1993
  550. --- Makefile.linux    Sat Jun 11 07:15:35 1994
  551. ***************
  552. *** 0 ****
  553. --- 1,29 ----
  554. + #
  555. + # pppstats makefile
  556. + # $Id: Makefile.linux,v 1.1 1994/04/21 03:10:50 paulus Exp $
  557. + #
  558. + PPPSTATSRCS = pppstats.c
  559. + PPPSTATOBJS = pppstats.o
  560. + #CC = gcc
  561. + COPTS = -O2
  562. + COMPILE_FLAGS = -D_linux_=1
  563. + LIBS = 
  564. + LINUX = /usr/src/linux
  565. + CFLAGS = -I$(LINUX)/drivers/net -I.. $(COPTS) $(COMPILE_FLAGS)
  566. + all: pppstats
  567. + install:
  568. +     install -c -g kmem pppstats $(BINDIR)/pppstats
  569. + pppstats: $(PPPSTATSRCS)
  570. +     $(CC) $(CFLAGS) -o pppstats pppstats.c $(LIBS)
  571. + clean:
  572. +     rm -f pppstats *~ #* core
  573. + depend:
  574. +     cpp -M $(CFLAGS) $(PPPSTATSRCS) >.depend
  575.  
  576. --
  577. Al Longyear                     longyear@netcom.com
  578.  
  579.  
  580.  
  581.